// 实例属性/方法
// 原型属性/方法
// 静态属性/方法

// 继承
class Person {
  // 构造器
  // new Person 的时候就会执行
  // new Person('ifer', 18) => ifer 就对应 name，age 就对应 18
  constructor(name, age, address) {
    // 构造函数中 this 就是实例
    // !#1 实例属性
    this.name = name
    this.age = age
    // 实例方法，一般方法不会往这儿挂，因为往这儿挂的话，多个实例的方法 show 发现不相等，内存浪费
    // this.show = function () {}

    // ###
    // 写到这儿的能接收参数，例如 address
    /* this.state = {
      address,
      city: '周口',
    } */

    // ###2
    // this.handleClick = () => {}
  }

  // 【称为实例属性】
  // 这种写法也是挂载到实例上面的，等价于 ### 处的代码
  // 写到这儿没法接收参数，例如 constructor 中的 address
  state = {
    address: '河南',
    city: '周口',
  }
  // 【称为实例方法】，等价于 ###2 处的代码
  handleClick = () => {}

  // !#2 原型方法
  show() {
    console.log('~~~')
  }

  // !#3 静态属性/方法
  static version = 888
  static css() {
    console.log('CSS')
  }
}

const p1 = new Person('ifer', 18, '河南')
console.log(p1.state)
